package com.example.demo.jucConcurrent.ThreadLocal详解;

/**
 * ThreadLocal是通过线程隔离的方式防止任务在共享资源上产生冲突,线程本地缓存时一种
 * 自动化机制,可以为使用相同的变量的每个不同线程都创建不同的存储
 *
 * 我们在java并发-并发理论基础总结过线程安全(指的是广义上的共享资源访问安全性,因为线程在隔离是通过副本保证线程访问资源的安全性,他不
 * 保证线程之间还存在共享关系的侠义上的安全性)
 *
 * 互斥同步
 *
 * 总结而言:ThreadLocal是一个将在多线程中为每一个线程创建变量副本的类,当使用Threadlocal来维护变量时,
 * ThreadLocal会为每个线程创建单独的变量副本,避免因多线程操作共享变量而导致的数据不一致的情况
 *
 *
 * ThreadLocal被提到应用最多的的是Session管理和数据库链接的管理,这里以数据访问为例帮你理解
 *
 * 如何实现线程隔离
 * 主要是用了Thread对象中的一个ThreadLocalMap类型的变量Threadlocals,负责存储当前线程的关于Connection的对象
 * dbConnectionLocal(以上述例子)这个变量为key,以新建的Connecttion对象的Value,这样的话线程第一次读取的时候
 * 就会调用threadLocak的initiavalue方法区创建一个Connection对象并且返回;
 *
 * ThreadLocalMap对象是什么
 * 本质上来讲,他就是一个Map,但是这个ThreadLocalMap与我们平时见到的
 */
public class demo_01 {
}
